package com.yyb.annotation; // 包名：自定义注解所在包

import java.lang.annotation.Documented;              // 让生成的 Javadoc 中包含注解说明
import java.lang.annotation.ElementType;            // 指定注解可以应用的Java元素类型（如方法、类等）
import java.lang.annotation.Retention;              // 注解保留策略
import java.lang.annotation.RetentionPolicy;        // 保留策略的枚举类：源码、编译时、运行时
import java.lang.annotation.Target;                 // 指定注解的作用范围，如方法、类、字段等

import com.yyb.enums.BusinessType;                  // 导入业务类型的枚举，用于标注操作类型（新增、删除、修改等）

/**
 * 自定义操作日志记录注解
 * 用于标记在方法上，自动记录该方法的操作日志，如模块名、操作类型、是否记录参数等
 */
@Target({ElementType.METHOD})                      // 表示该注解只能用于方法上
@Retention(RetentionPolicy.RUNTIME)                // 表示该注解在运行时仍然可见（配合AOP实现）
@Documented                                        // 让注解在javadoc中显示出来
public @interface Log {                            // 定义一个注解：Log

    /**
     * 模块名称
     * 例如：“用户管理”、“字典管理”等
     */
    String title() default "";                      // 默认模块标题为空，可手动设置

    /**
     * 功能类型（新增、修改、删除等）
     * 使用枚举 BusinessType 来限制类型
     */
    BusinessType businessType() default BusinessType.OTHER; // 默认类型是OTHER（其他）

    /**
     * 是否记录请求参数
     * 一般用于调试或记录操作详情
     */
    boolean isSaveRequestData() default true;       // 默认为记录请求参数

    /**
     * 是否记录响应结果
     * 用于记录接口响应数据，可选
     */
    boolean isSaveResponseData() default true;      // 默认为记录响应参数
}
